﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DiscreteEventModel {

    using Common;

    public partial class DiscreteEvent<TContext> {

        public interface IProcess {
            TContext Context { get; }
        }

        partial class EngineProcess : IProcess {

            internal DiscreteTime _time;
            private PriorityQueue<Agent> _agentQueue;
            private TContext _context;

            public TContext Context {
                get {
                    return this._context;
                }
            }

            public EngineProcess(TContext context) {
                this._context = context;
                this._time = DiscreteTime.Base;
                this._agentQueue = PriorityQueue<Agent>.Create(this);
            }
        }
    }
}
